package GUI;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * @ClassName : JDialogDemo
 * @Author : LV88VL
 * @Date: 2021/3/25 16:18
 * @Description : JDialog类======类似于Dialog是一个对话框
 *      JDialog类有模态和非模态之分：
 *      区别：
 *      模态对话框：必须等用户处理完对话框后才能和其他窗口交互
 *      非模态-------------------->相反
 *
 *      JDialog类构造方法:
 *      JDialog(Frame owner)：创建一个具有指定 Frame为其拥有者和一个空的标题”对话框。
 *      JDialog(Frame owner, String title)：创建一个非模态对话框与指定名称和指定的主框架。
 *      JDialog(Frame owner, boolean modal)：创建一个空的标题和指定的方式和 Frame主人对话。
 *                  modal -指定对话框阻止用户输入其他的顶层窗口时显示。
 *                  如果 true为模态对话框，false是非模态对话框。
 *
 *       意思：通过getComponents().length方法查看组件个数
 *       组件包含按钮、对话框等等
 *        if(dialog.getComponents().length==1){
 *                     dialog.add(label);
 *                 }
 */
public class JDialogDemo {
    public static void main(String[] args) {
        //建立两个按钮
        JButton btn1=new JButton("模态对话框");
        JButton btn2=new JButton("非模态对话框");
        //创建一个窗体对象
        JFrame jf=new JFrame("DialogDemo");
        //设置窗体属性
        jf.setSize(300,200);
        jf.setLocation(300,200);
        //设置布局管理器
        jf.setLayout(new FlowLayout());
        //把按钮添加到容器中
        jf.add(btn1);
        jf.add(btn2);
        //设置点击关闭按钮默认
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        //定义一个label标签
        JLabel label = new JLabel();
        //定义一个JDialog对话框
        JDialog dialog =new JDialog(jf,"Dialog");
        //设置对话框大小
        dialog.setSize(250,250);
        //设置对话框位置
        dialog.setLocation(200,300);
        //设置布局管理器
        dialog.setLayout(new FlowLayout());
        JButton btn3=new JButton("确定");
        dialog.add(btn3);
        //为模态对话框按钮添加事件
        btn1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //设置对话框的模态
                dialog.setModal(true);
                //如JDialog窗口中没有添加Label标签，就加上
                if(dialog.getComponents().length==1){
                    dialog.add(label);
                }
                //否则修改标签内容
                label.setText("模态对话框，点击确定按钮关闭");
                //实现对话框
                dialog.setVisible(true);
            }
        });
        //为非模态对话框添加按钮事件
        btn2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //设置对话框模态
                dialog.setModal(false);
                //如果JDialog窗口总没有添加Label标签，就加上
                if (dialog.getComponents().length==1) {
                    dialog.add(label);
                }
                //否则修改标签内容
                label.setText("非模态对话框，点击确定按钮关闭");
                //实现对话框
                dialog.setVisible(true);
            }
        });
        //给对话框按钮添加事件
        btn3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dialog.dispose();
            }
        });
    }
}
